package com.spring.spi;

import org.springframework.core.io.support.SpringFactoriesLoader;

import java.util.List;

/**
* Description: <br/>
* date: 2023/11/29 15:43<br/>
* @author: zhangzaijun <br/>
* @since JDK 1.8
* Spring SPI （Service Provider Interface）机制是一种扩展机制，用于实现模块化和可插拔的架构。它允许开发者定义接口，并通过SPI机制加载和使用接口的实现类
* 工作原理
* 具体来说，Spring的SPI机制包括以下几个关键点：
* 1.定义接口：首先，您需要定义一个接口，该接口定义了一组可插拔的功能或扩展点。
* 2.实现接口：然后，您可以编写多个实现了该接口的类，每个类提供不同的功能实现。
* 3.配置实现类：在META-INF/spring.factories文件中，您可以配置每个接口的实现类。该文件是一个属性文件，每个属性的键是接口的全限定名，值是实现类的全限定名。
* 4.加载实现类：通过SpringFactoriesLoader.loadFactories()方法，您可以加载并实例化配置文件中指定的接口实现类。
* 5.使用实现类：一旦实现类被加载，您就可以在应用程序中使用它们，调用接口定义的方法
*/

public class SPIDemoMain {
    public static void main(String[] args) {
        List<MyService> list = SpringFactoriesLoader.loadFactories(MyService.class,null);

        for (MyService myService : list){
            myService.doSomething();
        }
    }
}
